package com.wt.springsamples.juc;

import java.util.concurrent.locks.ReentrantLock;

/**
 * 1、AbstractQueuedSynchronizer
 * a、state:锁状态，0空闲、1被占用
 * b、队列：Node-->线程Thread对象，Thread.currentThread();
 * c、LockSupport:当有别的线程加锁成功时，新进入的线程会使用自旋改变Node的waitStatus属性，
 * 由初始状态0改为需要唤醒状态-1，并调用LockSupport.park()阻塞当前线程，等待锁释放后（lock.unlock）被唤醒(调用LockSupport.unpark(Thread currentThread))
 *2、公平锁:竞争的线程需要在队列上排队，具由先后顺序
 *3、非公平锁:竞争的线程不需要排队，需要获取锁时自旋加锁 for(;;)+cas
 *
 */
public class ReentrantLockTest {
    public static void main(String[] args) {
        ReentrantLock lock = new ReentrantLock();
        lock.lock();
        try {
            lock.newCondition().signal();
        }finally {
            lock.unlock();
        }
    }
}
